'''
Created on 30/08/2013

@author: daniel
'''

import unittest

class NodoBinario(object):
    '''
    clase nodo binario: contiene al objeto y dos link
    '''
    def __init__(self,elem,izq=None,der=None,nivel=0):
        self.objeto=elem
        self.linkL=izq
        self.linkR=der
        self.nivel=nivel
    
    def __cmp__(self,otro):
        return self.objeto.__cmp__(otro.objeto)
                   
    def getObjeto(self):
        return self.objeto
    
    def setObjeto(self,elem):
        self.objeto=elem
    
    def getLinkL(self):
        return self.linkL
    
    def setLinkL(self,sig):
        self.linkL=sig

    def getLinkR(self):
        return self.linkR

    def setLinkR(self, sig):
        self.linkR = sig

    def getNivel(self):
        return self.nivel

    def setNivel(self, value):
        self.nivel = value


class Test(unittest.TestCase):


    def testInit(self):
        self.assertIsInstance(NodoBinario(None), NodoBinario, "testea creaciona de nodo")

    def testGetObjeto(self):
        first=NodoBinario(23)
        self.assertEquals(first.getObjeto(), 23,"Verifica que entregue el objeto")


    def testSetObjeto(self):
        first=NodoBinario(None)
        self.assertIsNone(first.objeto, "Verifica que el objeto no esta")
        first.setObjeto(23)
        self.assertIsNotNone(first.objeto,"Verifica que el objeto si esta")

    def testSetLinkL(self):
        first=NodoBinario(None)
        self.assertIsNone(first.linkL, "Verifica que el objeto no esta")
        first.setLinkL(23)
        self.assertIsNotNone(first.linkL,"Verifica que el objeto si esta")

    def testGetLinkL(self):
        first=NodoBinario(None,23)
        self.assertEquals(first.getLinkL(), 23,"Verifica que entregue el objeto")
 
    def testSetLinkR(self):
        first=NodoBinario(None)
        self.assertIsNone(first.linkL, "Verifica que el objeto no esta")
        first.setLinkR(23)
        self.assertIsNotNone(first.linkR,"Verifica que el objeto si esta")

    def testGetLinkR(self):
        first=NodoBinario(None,None,23)
        self.assertEquals(first.getLinkR(), 23,"Verifica que entregue el objeto")
        
    def testGetNivel(self):
        nodo=NodoBinario(None,None,None,100)
        self.assertEquals(nodo.getNivel(), 100, "verifica correcta entrega del nivel del nodo")

    def testSetNivel(self):
        nodo=NodoBinario(None)
        self.assertEquals(nodo.getNivel(),0,"verifica correcta entrega del nivel del nodo")
        nodo.setNivel(100)
        self.assertEquals(nodo.getNivel(), 100, "verificael cambio de nivel")

    def testCmp(self):
        uno=NodoBinario(3)
        otro=NodoBinario(8)
        self.assertEqual(uno.__cmp__(otro), -1, "Verifica comparacion")
        self.assertEqual(otro.__cmp__(uno), 1, "Verifica comparacion")

        
if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()